home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / c / qtools0.2-src.lha / src / include / mathlib.h < prev   
Encoding:
C/C++ Source or Header  |  1998-08-11  |  2.3 KB  |  83 lines

  1. #ifndef MATHLIB_H
  2. #define MATHLIB_H
  3. /* mathlib.h */
  4. #ifdef    HAVE_MATH_H
  5. # include <math.h>
  6. #endif
  7.  
  8. /*
  9. #ifndef    HAVE_SCALW
  10. #ifdef    HAVE_SCALB
  11. #define    scalw(x, y)    scalb((x), (y))
  12. #else
  13. #define    scalw(x, y)    (((y) >= 0) ? ((x) * (1 << (y))) : ((x) / (1 << (-(y)))))
  14. #endif
  15. #endif
  16.  */
  17.  
  18. typedef float vec_t;
  19. typedef vec_t vec3_t[3];
  20.  
  21. #define    SIDE_FRONT        0
  22. #define    SIDE_ON            2
  23. #define    SIDE_BACK        1
  24. #define    SIDE_CROSS        -2
  25.  
  26. #define    Q_PI    3.14159265358979323846
  27.  
  28. #define    EQUAL_EPSILON    0.001
  29.  
  30. #define VectorCompare(v1, v2) (((v1[0] != v2[0]) || (v1[1] != v2[1]) || (v1[2] != v2[2])) ? 0 : 1)
  31. #define VectorZero(v1) ((v1[0] == 0) && (v1[1] == 0) && (v1[2] == 0))
  32.  
  33. #define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
  34. #define VectorSubtract(a,b,c) {c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];}
  35. #define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];}
  36. #define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];}
  37. #define VectorClear(x) {x[0] = x[1] = x[2] = 0;}
  38. #define    VectorNegate(x) {x[0]=-x[0];x[1]=-x[1];x[2]=-x[2];}
  39. #define    VectorNegateTo(x, y) {y[0]=-x[0];y[1]=-x[1];y[2]=-x[2];}
  40. #define    VectorAbs(x) {fabs(x[0]);fabs(x[1]);fabs(x[2]);}
  41.  
  42. #define _DotProduct DotProduct
  43. #define _VectorSubtract VectorSubtract
  44. #define _VectorAdd VectorAdd
  45. #define _VectorCopy VectorCopy
  46.  
  47. #define VectorLength(v) (sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]))
  48. #define VectorDist(v) (v[0]*v[0] + v[1]*v[1] + v[2]*v[2])
  49.  
  50. void VectorMA(vec3_t veca, double scale, vec3_t vecb, vec3_t vecc);
  51. void CrossProduct(vec3_t v1, vec3_t v2, vec3_t cross);
  52. vec_t VectorNormalize(vec3_t v);
  53.  
  54. extern inline void VectorMA(vec3_t veca, double scale, vec3_t vecb, vec3_t vecc)
  55. {
  56.   vecc[0] = veca[0] + scale * vecb[0];
  57.   vecc[1] = veca[1] + scale * vecb[1];
  58.   vecc[2] = veca[2] + scale * vecb[2];
  59. }
  60.  
  61. extern inline void CrossProduct(vec3_t v1, vec3_t v2, vec3_t cross)
  62. {
  63.   cross[0] = v1[1] * v2[2] - v1[2] * v2[1];
  64.   cross[1] = v1[2] * v2[0] - v1[0] * v2[2];
  65.   cross[2] = v1[0] * v2[1] - v1[1] * v2[0];
  66. }
  67.  
  68. extern inline vec_t VectorNormalize(vec3_t v)
  69. {
  70.   vec_t len = VectorLength(v);
  71.  
  72.   if (len) {
  73.     v[0] /= len;
  74.     v[1] /= len;
  75.     v[2] /= len;
  76.   }
  77.   return len;
  78. }
  79.  
  80. #define VectorInverse(v) {v[0] = -v[0]; v[1] = -v[1]; v[2] = -v[2];}
  81. #define VectorScale(in, scale, out) {out[0] = in[0] * scale; out[1] = in[1] * scale; out[2] = in[2] * scale;}
  82. #endif
  83.